iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
自我挑戰組

初學C#之路:30天基礎學習與實作紀錄系列 第 5

Day5-方法和傳遞機制Part1

  • 分享至 

  • xImage
  •  

參數的傳遞機制
使用方法時,若要取得回傳結果得透過return敘述;但是它只能回傳一個結果。
方法之間若要回傳多個參數值,就必須要進一步了解方法中參數、引數間資料的傳遞。

方法定義時若括號內有指定對象,稱為參數(Parameter)。
呼叫方法才有傳遞資料的動作,稱為引數(Argument)。
實際引數(Actual argument,簡稱引數):程式中呼叫方法將資料傳遞者
形式參數(Formal parameter,簡稱參數):方法定義時設定參數接收資料,進入方法主體執行敘述或運算。

傳值呼叫(Passing by value)
是指實際引數呼叫方法時,會先將變數內容(值value)複製,再把副本傳遞形式參數。
注意:實際引數所傳遞的引數和形式參數的方法必須是相同的型別
由於實際引數和形式參數分佔不同的記憶體位置
方法定義所接受的是變數值,而非變數本身
執行程式時,形式參數若有改變,並不會影響原來實際引數的內容。

using System;

namespace HelloWorld
{
  class Arithmetic
  {
    // 計算等差數列的和
    private int progression(int first, int last, int diversity, out int number)
    {
      int sum = 0, temp = 0;
      number = 0; // 項數
      
      // 若首項大於末項,交換它們
      if (first > last)
      {
        temp = first;
        first = last;
        last = temp;
      }
      
      // 計算項數
      number = (last - first) / diversity + 1; 
      
      // 計算等差數列的和
      sum = (number * (first + last)) / 2; 
      
      return sum; // 回傳計算結果
    }

    static void Main(string[] args)
    {
      // 定義變數,並將 item(差值)設置為 5
      int first_value = 125;
      int last_value = 421;
      int item = 5;  // 差值為 5

      // 創建 Arithmetic 類的實例
      Arithmetic copyValue = new Arithmetic();
      
      // 計算等差數列和與項數
      int number_of_terms; // 用來存儲項數
      int total = copyValue.progression(first_value, last_value, item, out number_of_terms);
      
      // 顯示結果
      Console.WriteLine($"---等差數列的計算---");
      Console.WriteLine($"初始值(首項):{first_value}");
      Console.WriteLine($"終止值(末項):{last_value}");
      Console.WriteLine($"差值:{item}");
      Console.WriteLine($"項數:{number_of_terms}"); // 顯示項數
      Console.WriteLine($"{first_value} 到 {last_value} 的差數和:{total:N0}");
      Console.WriteLine($"首項 = {first_value},末項 = {last_value},差值 = {item}");
    }
  }
}

N0 是一個標準數字格式字串,N 表示數字格式化,而 0 表示顯示零個小數位。這會將數字格式化為包含千位分隔符的整數格式。

傳址呼叫
傳遞引數另一種機制是傳址。
傳址是記憶體的位址。
實際引數呼叫方法時會傳遞記憶體未址給形式參數,連同記憶體儲存的資料也會連帶傳送;
形成實際引數、形式參數共用相同的記憶體位址,當形式參數的植被改變時,也會影響實際引數的內容。
何種情形之下會使用傳址呼叫?
通常是方法內要將多項資料結果回傳,而且return敘述只能回傳一個結果情況下

使用傳址呼叫注意兩件事:
無論是實際引數或形式參數,其型別前必須加上方法參數ref或out。
實際引數所指定的引數,必須給予初值設定。

傳值和傳址還在釐清中,過幾天會再補充說明

以上來源:從零開始學visual C# 2017程式設計、W3Schools、詢問chatGPT
內容有誤的話,請留言或發訊息給我


上一篇
Day4-C#陣列寫法學習Part3
下一篇
Day6-C#陣列寫法學習Part4
系列文
初學C#之路:30天基礎學習與實作紀錄10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言